function res = GetXe131FID(obj, duration, varargin)
    p=inputParser;
    p.addRequired('duration', @(x) x>0);
    p.addParameter('rate', 2e3, @(x) x>0);
    p.addParameter('targetResolution', 1e-3, @(x) x>0.0)
    p.addParameter('guessFrequency', 75.0, @(x) x>0.0);
    p.addParameter('initAmplitude', 0.100, @(x) x>0.0);
    p.addParameter('isReport', false, @islogical);
    p.addParameter('isPlot', true, @islogical);
    p.addParameter('description', 'No description.', @ischar);
    p.parse(duration, varargin{:});
    
    %%
    obj.setParametricMagnetometer('isLockTransverseField', true);
    obj.setNMR('frequency131', p.Results.guessFrequency, 'frequency129', p.Results.guessFrequency*3.37340);
    obj.by.setDriver( obj.ziSlave.LockInChannel(2).setOscillator(2) );
    obj.by.setAC('frequency', p.Results.guessFrequency, 'amplitude', p.Results.initAmplitude, 'range', 10.0); pause(5);
    obj.ziSlave.disableOutAmplitude();pause(0.1);
    
    sg = MeasurementComponent.Signal.SignalGroup('Xe131FIDGroup');
    sg.subscribe_signal(obj.bTrans, ziDemodTime.X, [2, 1, 1]);
    sg.subscribe_signal(obj.Xe131,  ziDemodTime.R, [2, 1, 2]);
    fid = sg.getDemodSignal(duration, 'rate', p.Results.rate);
    fitting = obj.FitXe131FID(fid, varargin{:});

    %%
    res.timestamp = datetime('now');
    res.signal = fid;
    res.fitting = fitting;
    res.T2 = fitting.tau;
    res.f131 = fitting.fft.center;
    obj.SystemInfo.Xe131FID = res;
    
    %%
    if p.Results.isPlot
        fig = obj.PlotXe131FID();
    end
    
    %%
    if p.Results.isReport
        getReporter;
        rpt.NewRecord(['Xe131FID_' p.Results.description]);
        if p.Results.isPlot
            rpt.AppendFigure(fig, sprintf('Xe129FID %s', p.Results.description));
        end
    end
    
    getSession;
    sess.addData('Xe131FID', res, p.Results.description);
end